From: Jeroen van der Heijden Date: Fri, 29 Jun 2018 16:26:41 +0000 (+0200) Subject: Work on update on grammar X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~9^2~8 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=8eb86ee9c50628ea9c586af247e76f1b02822af2;p=siridb-server.git Work on update on grammar --- diff --git a/.gitignore b/.gitignore index 2c4891f3..2a22e1ca 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,8 @@ build/ grammar/cgrammar/ grammar/jsgrammar/ grammar/pygrammar/ +grammar/gogrammar/ +grammar/javagrammar/ # Sublime Text *.sublime-project diff --git a/ChangeLog-2.0.29 b/ChangeLog-2.0.29 index 40eddec8..a3ba265b 100644 --- a/ChangeLog-2.0.29 +++ b/ChangeLog-2.0.29 @@ -1 +1,3 @@ * Added filter log series by using a regular expressions. (issue #100) + + * Fixed bug with long log values. (issue #102) \ No newline at end of file diff --git a/grammar/export_grammar.py b/grammar/export_grammar.py index 2c2eb8a8..74d2d90b 100755 --- a/grammar/export_grammar.py +++ b/grammar/export_grammar.py @@ -6,6 +6,7 @@ Date: 2016-10-10 ''' import os import sys +sys.path.insert(0, '../../pyleri/') from grammar import siri_grammar @@ -76,4 +77,4 @@ if __name__ == '__main__': encoding='utf-8') as f: f.write(go_file) - print('\nFinished creating new go-grammar file...\n') \ No newline at end of file + print('\nFinished creating new go-grammar file...\n') diff --git a/grammar/gogrammar/grammar.go b/grammar/gogrammar/grammar.go index eb74c392..b61dd6fc 100644 --- a/grammar/gogrammar/grammar.go +++ b/grammar/gogrammar/grammar.go @@ -4,7 +4,7 @@ package grammar // should be used with the goleri module. // // Source class: SiriGrammar -// Created at: 2018-06-22 15:10:04 +// Created at: 2018-06-29 17:12:20 import ( "regexp" @@ -75,7 +75,6 @@ const ( GidGroupColumns = iota GidGroupMatch = iota GidGroupName = iota - GidHelp = iota GidHelpAccess = iota GidHelpAlter = iota GidHelpAlterDatabase = iota @@ -112,6 +111,7 @@ const ( GidHelpRevoke = iota GidHelpSelect = iota GidHelpShow = iota + GidHelpStmt = iota GidHelpTimeit = iota GidHelpTimezones = iota GidIntExpr = iota @@ -1635,6 +1635,27 @@ func SiriGrammar() *goleri.Grammar { ), goleri.NewToken(NoGid, ","), 0, 0, false), ) timeitStmt := goleri.NewRepeat(GidTimeitStmt, kTimeit, 1, 1) + helpStmt := goleri.NewRef() + START := goleri.NewSequence( + GidSTART, + goleri.NewOptional(NoGid, timeitStmt), + goleri.NewOptional(NoGid, goleri.NewChoice( + NoGid, + false, + selectStmt, + listStmt, + countStmt, + alterStmt, + createStmt, + dropStmt, + grantStmt, + revokeStmt, + showStmt, + calcStmt, + helpStmt, + )), + goleri.NewOptional(NoGid, rComment), + ) helpAccess := goleri.NewKeyword(GidHelpAccess, "access", false) helpAlterDatabase := goleri.NewKeyword(GidHelpAlterDatabase, "database", false) helpAlterGroup := goleri.NewKeyword(GidHelpAlterGroup, "group", false) @@ -1732,8 +1753,8 @@ func SiriGrammar() *goleri.Grammar { helpShow := goleri.NewKeyword(GidHelpShow, "show", false) helpTimeit := goleri.NewKeyword(GidHelpTimeit, "timeit", false) helpTimezones := goleri.NewKeyword(GidHelpTimezones, "timezones", false) - help := goleri.NewSequence( - GidHelp, + helpStmt.Set(goleri.NewSequence( + NoGid, kHelp, goleri.NewOptional(NoGid, goleri.NewChoice( NoGid, @@ -1753,26 +1774,6 @@ func SiriGrammar() *goleri.Grammar { helpTimeit, helpTimezones, )), - ) - START := goleri.NewSequence( - GidSTART, - goleri.NewOptional(NoGid, timeitStmt), - goleri.NewOptional(NoGid, goleri.NewChoice( - NoGid, - false, - selectStmt, - listStmt, - countStmt, - alterStmt, - createStmt, - dropStmt, - grantStmt, - revokeStmt, - showStmt, - calcStmt, - help, - )), - goleri.NewOptional(NoGid, rComment), - ) + )) return goleri.NewGrammar(START, regexp.MustCompile(`^[a-z_]+`)) } diff --git a/grammar/grammar.py b/grammar/grammar.py index c01d780d..3f2affa7 100644 --- a/grammar/grammar.py +++ b/grammar/grammar.py @@ -7,6 +7,7 @@ from pyleri import Keyword from pyleri import List from pyleri import Optional from pyleri import Prio +from pyleri import Ref from pyleri import Regex from pyleri import Repeat from pyleri import Sequence @@ -773,6 +774,27 @@ class SiriGrammar(Grammar): timeit_stmt = Repeat(k_timeit, 1, 1) + help_stmt = Ref() + + START = Sequence( + Optional(timeit_stmt), + Optional(Choice( + select_stmt, + list_stmt, + count_stmt, + alter_stmt, + create_stmt, + drop_stmt, + grant_stmt, + revoke_stmt, + show_stmt, + calc_stmt, + help_stmt, + most_greedy=False)), + Optional(r_comment)) + + help_stmt = Sequence(k_help) # Dummy + def _set_attribute(cls, name, value): setattr(cls, name, value) @@ -791,11 +813,14 @@ def _walk(cls, path, structure): if structure: for child_path, child in structure.items(): _walk(cls, child_path, child) - value = Sequence(*[getattr(cls, - 'k_' + path[-1], - Keyword(path[-1])), Optional( - Choice(*[ - getattr(cls, '_'.join(p)) for p in structure.keys()]))]) + + opt = Optional(Choice(*[ + getattr(cls, '_'.join(p)) for p in structure.keys()])) + + value = Sequence(*[getattr( + cls, + 'k_' + path[-1], + Keyword(path[-1])), opt]) else: value = Keyword(path[-1]) except AttributeError: @@ -804,7 +829,11 @@ def _walk(cls, path, structure): import sys sys.exit(1) else: - _set_attribute(cls, name, value) + if name != 'help': + _set_attribute(cls, name, value) + else: + # Replace the ref element + cls.help_stmt._element = value def _build_help(cls): @@ -816,22 +845,5 @@ def _build_help(cls): _walk(cls, path, structure) _build_help(SiriGrammar) -_set_attribute(SiriGrammar, 'START', Sequence( - Optional(SiriGrammar.timeit_stmt), - Optional(Choice( - SiriGrammar.select_stmt, - SiriGrammar.list_stmt, - SiriGrammar.count_stmt, - SiriGrammar.alter_stmt, - SiriGrammar.create_stmt, - SiriGrammar.drop_stmt, - SiriGrammar.grant_stmt, - SiriGrammar.revoke_stmt, - SiriGrammar.show_stmt, - SiriGrammar.calc_stmt, - SiriGrammar.help, - most_greedy=False)), - Optional(SiriGrammar.r_comment))) - siri_grammar = SiriGrammar() diff --git a/include/siri/grammar/grammar.h b/include/siri/grammar/grammar.h index bd6c2dc8..44568b64 100644 --- a/include/siri/grammar/grammar.h +++ b/include/siri/grammar/grammar.h @@ -5,7 +5,7 @@ * should be used with the libcleri module. * * Source class: SiriGrammar - * Created at: 2018-06-22 15:10:04 + * Created at: 2018-06-29 17:09:17 */ #ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_ #define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_ @@ -75,7 +75,6 @@ enum cleri_grammar_ids { CLERI_GID_GROUP_COLUMNS, CLERI_GID_GROUP_MATCH, CLERI_GID_GROUP_NAME, - CLERI_GID_HELP, CLERI_GID_HELP_ACCESS, CLERI_GID_HELP_ALTER, CLERI_GID_HELP_ALTER_DATABASE, @@ -112,6 +111,7 @@ enum cleri_grammar_ids { CLERI_GID_HELP_REVOKE, CLERI_GID_HELP_SELECT, CLERI_GID_HELP_SHOW, + CLERI_GID_HELP_STMT, CLERI_GID_HELP_TIMEIT, CLERI_GID_HELP_TIMEZONES, CLERI_GID_INT_EXPR, diff --git a/include/siri/grammar/gramp.h b/include/siri/grammar/gramp.h index 2572a6d7..439efdce 100644 --- a/include/siri/grammar/gramp.h +++ b/include/siri/grammar/gramp.h @@ -26,5 +26,5 @@ #define F_OFFSET CLERI_GID_F_COUNT /* help statements */ -#define HELP_OFFSET CLERI_GID_HELP +#define HELP_OFFSET CLERI_GID_HELP_ACCESS #define HELP_COUNT CLERI_GID_HELP_TIMEZONES + 1 - HELP_OFFSET diff --git a/src/siri/grammar/grammar.c b/src/siri/grammar/grammar.c index 00d1ad45..dad86d35 100644 --- a/src/siri/grammar/grammar.c +++ b/src/siri/grammar/grammar.c @@ -5,7 +5,7 @@ * should be used with the libcleri module. * * Source class: SiriGrammar - * Created at: 2018-06-22 15:10:04 + * Created at: 2018-06-29 17:09:17 */ #include "siri/grammar/grammar.h" @@ -1522,6 +1522,29 @@ cleri_grammar_t * compile_grammar(void) ), cleri_token(CLERI_NONE, ","), 0, 0, 0) ); cleri_t * timeit_stmt = cleri_dup(CLERI_GID_TIMEIT_STMT, k_timeit); + cleri_t * help_stmt = cleri_ref(); + cleri_t * START = cleri_sequence( + CLERI_GID_START, + 3, + cleri_optional(CLERI_NONE, timeit_stmt), + cleri_optional(CLERI_NONE, cleri_choice( + CLERI_NONE, + CLERI_FIRST_MATCH, + 11, + select_stmt, + list_stmt, + count_stmt, + alter_stmt, + create_stmt, + drop_stmt, + grant_stmt, + revoke_stmt, + show_stmt, + calc_stmt, + help_stmt + )), + cleri_optional(CLERI_NONE, r_comment) + ); cleri_t * help_access = cleri_keyword(CLERI_GID_HELP_ACCESS, "access", CLERI_CASE_SENSITIVE); cleri_t * help_alter_database = cleri_keyword(CLERI_GID_HELP_ALTER_DATABASE, "database", CLERI_CASE_SENSITIVE); cleri_t * help_alter_group = cleri_keyword(CLERI_GID_HELP_ALTER_GROUP, "group", CLERI_CASE_SENSITIVE); @@ -1629,8 +1652,8 @@ cleri_grammar_t * compile_grammar(void) cleri_t * help_show = cleri_keyword(CLERI_GID_HELP_SHOW, "show", CLERI_CASE_SENSITIVE); cleri_t * help_timeit = cleri_keyword(CLERI_GID_HELP_TIMEIT, "timeit", CLERI_CASE_SENSITIVE); cleri_t * help_timezones = cleri_keyword(CLERI_GID_HELP_TIMEZONES, "timezones", CLERI_CASE_SENSITIVE); - cleri_t * help = cleri_sequence( - CLERI_GID_HELP, + cleri_ref_set(help_stmt, cleri_sequence( + CLERI_NONE, 2, k_help, cleri_optional(CLERI_NONE, cleri_choice( @@ -1652,29 +1675,7 @@ cleri_grammar_t * compile_grammar(void) help_timeit, help_timezones )) - ); - cleri_t * START = cleri_sequence( - CLERI_GID_START, - 3, - cleri_optional(CLERI_NONE, timeit_stmt), - cleri_optional(CLERI_NONE, cleri_choice( - CLERI_NONE, - CLERI_FIRST_MATCH, - 11, - select_stmt, - list_stmt, - count_stmt, - alter_stmt, - create_stmt, - drop_stmt, - grant_stmt, - revoke_stmt, - show_stmt, - calc_stmt, - help - )), - cleri_optional(CLERI_NONE, r_comment) - ); + )); cleri_grammar_t * grammar = cleri_grammar(START, "^[a-z_]+"); diff --git a/src/siri/parser/listener.c b/src/siri/parser/listener.c index 0c2d051a..bdce9539 100644 --- a/src/siri/parser/listener.c +++ b/src/siri/parser/listener.c @@ -413,7 +413,7 @@ void siriparser_init_listener(void) siriparser_listen_enter[CLERI_GID_GRANT_USER] = enter_grant_user; siriparser_listen_enter[CLERI_GID_GROUP_COLUMNS] = enter_xxx_columns; siriparser_listen_enter[CLERI_GID_GROUP_MATCH] = enter_group_match; - siriparser_listen_enter[CLERI_GID_HELP] = enter_help; + siriparser_listen_enter[CLERI_GID_HELP_STMT] = enter_help; siriparser_listen_enter[CLERI_GID_LIMIT_EXPR] = enter_limit_expr; siriparser_listen_enter[CLERI_GID_LIST_STMT] = enter_list_stmt; siriparser_listen_enter[CLERI_GID_MERGE_AS] = enter_merge_as; @@ -846,6 +846,7 @@ static void enter_group_match(uv_async_t * handle) static void enter_help(uv_async_t * handle) { + LOGC("Enter!!"); siridb_query_t * query = (siridb_query_t *) handle->data; cleri_node_t * node = query->nodes->node; @@ -2725,12 +2726,14 @@ static void exit_help_xxx(uv_async_t * handle) { siridb_query_t * query = (siridb_query_t *) handle->data; + LOGC("HERE...."); + if (query->data != NULL) { #if DEBUG assert (query->packer == NULL); #endif - + LOGC("HERE1....%u", query->nodes->node->cl_obj->gid); const char * help = siri_help_get( query->nodes->node->cl_obj->gid, (const char *) query->data, @@ -2738,6 +2741,7 @@ static void exit_help_xxx(uv_async_t * handle) if (help == NULL) { + LOGC("HERE2...."); siridb_query_send_error(handle, CPROTO_ERR_QUERY); return; }